#ifndef _AST_DECL_H
#define _AST_DECL_H

/// Base
class AST;

/// Programs and Blocks -----------------------------------
class ProgramAST;
class ProgramHeadingAST;
class ProgramBlockAST;
class BlockAST;
class ProgramParametersAST;
class IdentifierListAST;

/// Declarations and Definitions --------------------------
class ConstantDefinitionListAST;
class ConstantDefinitionAST;
class TypeDefinitionListAST;
class TypeDefinitionAST;
class VariableDeclarationListAST;
class VariableDeclarationAST;
class ProcedureFunctionDeclarationListAST;
// Subprogram Declarations
class SubprogramDeclarationAST;
//// Procedure Declarations
class ProcedureDeclarationAST;
class ProcedureHeadingAST;
class ProcedureBodyAST;
class TypeDenoterAST;
//// Function Declarations
class FunctionDeclarationAST;
class FunctionHeadingAST;
class FunctionBodyAST;
//// Formal Parameters and Arguments
class FormalParameterListAST;
class FormalParameterSectionAST;
class ValueParameterSpecificationAST;
class VariableParameterSpecificationAST;

/// Constants ---------------------------------------------
class ConstantAST;

/// Types -------------------------------------------------
class TypeIdentifierAST;
class SimpleTypeIdentifierAST;
class ArrayTypeAST;
class PeriodListAST;
class PeriodAST;
class RecordTypeAST;
class FieldListAST;
class FieldAST;

/// Statements --------------------------------------------
class StatementAST;
class ProcedureStatementAST;
class IOProcedureStatementAST;
class ActualParameterListAST;
class ReadParameterListAST;
class WriteParameterList;
class ActualParameterAST;
class StatementPartAST;
class CompoundStatement;
class StatementSequenceAST;
// Simple Statement
class EmptyStatementAST;
class AssignmentStatementAST;
// Conditional Statement
class IfStatementAST;
class CaseStatementAST;
// Repetitive Statement
class RepeatStatementAST;
class WhileStatementAST;
class ForStatementAST;
// Related to CaseStatementAST
class CaseListElementListAST;
class CaseListElementAST;
class CaseConstantListAST;

/// Expressions and Variables -----------------------------
class ExpressionAST;
class UnsignedConstantAST;
class IdentifierAST;
class BinaryAST;
class IndexedVariableAST;
class IndexExpressionListAST;
class IndexExpressionAST;
class FieldDesignatorAST;
class FunctionDesignatorAST;

#endif
